import { reqGoodDetail , reqAddOrUpdateCart} from "@/api";
//每一个小仓库需要有四样:state|mutations|actions|getters
const state = {
    goodInfo: {}
};
const mutations = {
    GETGOODINFO(state, goodInfo) {
        state.goodInfo = goodInfo;
    }
};
const actions = {
    //获取商品详情
    async getGoodInfo({ commit, state, dispatch, getters }, skuId) {
        let result = await reqGoodDetail(skuId);
        if (result.code == 200) {
            commit('GETGOODINFO', result.data);
        }
    },
    //加入购物车接口||还可以修改已有商品的数量
    async addOrUpdateCart({ commit, state, dispatch, getters }, { skuId, skuNum }) {
        //用户点击加入购物车,发了一个POST请求,目的,给服务器送一些数据,用户购买商品ID|num
        //服务器没有返回data数据,code==200,代表服务器接受数据成功了
        //既然服务器没有返回数据,vuex仓库state，没必要存储数据了！！！
        //第一种写法:result服务器返回数据,code如果200,代表加入购物车成功
        //vuex可以存储code,VC获取code，就可以在VC内部判断成功与失败
        let result = await reqAddOrUpdateCart(skuId, skuNum);   
        if(result.code==200){
            return 'ok';
        }else{
            return Promise.reject(new Error(result.message));
        }      
    },
};
  const getters = {
    //面包屑简化数据
    //当前仓库state,属性goodInfo,起始数值空的对象,当触发action会向服务器发请求，给goodInfo从新赋予新的数值！！！
    categoryView() {
        //state.goodInfo起始数值空对象,{}.categoryView->undefined
        //state.goodInfo当服务器数据返回，state.goodInfo进行二次计算，才是组件想要的数据！！！
        //当服务器数据没有回来:state.goodInfo.categoryView->undefined,计算出来数值{}
        //当服务器数据返回,计算属性依赖的数据发生变化，重新计算state.goodInfo.categoryView，返回即为服务器返回的数据
        return state.goodInfo.categoryView || {};
    },
    //商品详情数据：标题|价格
    skuInfo() {
        return state.goodInfo.skuInfo || {}
    },
    //销售属性计算---最多:颜色、版本、尺码
    //仓库里面数据：如果是数组||的语法处理假的报错，可以书写，也可以不写！！！
    spuSaleAttrList() {
        return state.goodInfo.spuSaleAttrList||[];
    },
    //放大镜与展示小图组件的数据
    skuImageList(){
        //放大镜与小图的数据
        //服务器数据没有返回:组件实质获取到空数组
        //服务器数据返回重新计算:组件获取数据才是服务器数据(数组里面放五个对象)
       return (state.goodInfo.skuInfo||{}).skuImageList||[];
    }
};

//对外暴露小仓库
export default {
    state,
    mutations,
    actions,
    getters,
}